widget actions: Add an explicit state type
authorMatthias Clasen <mclasen@redhat.com>
Sat, 22 Jun 2019 02:35:52 +0000 (02:35 +0000)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 22 Jun 2019 02:47:40 +0000 (22:47 -0400)
Make the state type part of the API for installing
stateful widget actions. That lets us introspect it.

Update all callers.

gtk/gtkactionmuxer.c
gtk/gtkactionmuxerprivate.h
gtk/gtkcolorchooserwidget.c
gtk/gtktext.c
gtk/gtkwidget.c
gtk/gtkwidget.h

index 33951ce463168e776d43cfab5a19a4ba24f076a4..515f93f6db0ecae921e9c3ab5d8b6464d0858bf0 100644 (file)
@@ -446,11 +446,11 @@ gtk_action_muxer_query_action (GActionGroup        *action_group,
                 *enabled = muxer->widget_actions_enabled[i];
               if (parameter_type)
                 *parameter_type = action->parameter_type;
+              if (state_type)
+                *state_type = action->state_type;
 
               if (state_hint)
                 *state_hint = NULL;
-              if (state_type)
-                *state_type = NULL;
               if (state)
                 *state = NULL;
 
@@ -460,8 +460,6 @@ gtk_action_muxer_query_action (GActionGroup        *action_group,
 
                   s = g_variant_ref_sink (action->get_state (muxer->widget, action->name));
 
-                  if (state_type)
-                    *state_type = g_variant_get_type (s);
                   if (state)
                     *state = g_variant_ref (s);
 
index 325c1f817a48f432924574b1f5956ee3513027d1..5a1218d84ac11d887b99a422a30afcde31fcb291 100644 (file)
@@ -35,6 +35,7 @@ typedef struct {
   char *name;
 
   GVariantType *parameter_type;
+  GVariantType *state_type;
 
   GtkWidgetActionActivateFunc activate;
   GtkWidgetActionSetStateFunc set_state;
index 7c29976c01a80c2aa428108d8df9d6cb534f74ca..9830b20417b96a476cc893cf28ee560268210ec8 100644 (file)
@@ -715,10 +715,10 @@ gtk_color_chooser_widget_class_init (GtkColorChooserWidgetClass *class)
 
   gtk_widget_class_install_stateful_action (GTK_WIDGET_CLASS (class), "color.select",
                                             gtk_color_chooser_widget_activate_color_select,
-                                            "(dddd)", NULL, NULL);
+                                            "(dddd)", NULL, NULL, NULL);
   gtk_widget_class_install_stateful_action (GTK_WIDGET_CLASS (class), "color.customize",
                                             gtk_color_chooser_widget_activate_color_customize,
-                                            "(dddd)", NULL, NULL);
+                                            "(dddd)", NULL, NULL, NULL);
 }
 
 /* GtkColorChooser implementation {{{1 */
index 7097a9eab0078ad6da156718d3b0daab6090c0af..370adda586e2c0e5f630275814d18209d0449e15 100644 (file)
@@ -1377,7 +1377,7 @@ gtk_text_class_init (GtkTextClass *class)
                                    gtk_text_activate_misc_insert_emoji);
   gtk_widget_class_install_stateful_action (widget_class, "misc.toggle-visibility",
                                             gtk_text_activate_misc_toggle_visibility,
-                                            NULL,
+                                            NULL, "b",
                                             gtk_text_set_misc_toggle_visibility,
                                             gtk_text_get_misc_toggle_visibility);
 }
index f2a8c9710c5e374442a1636cad56750f744c5788..4b093bfaa881cd8dc1a6666336c1bbe43c4ba777 100644 (file)
@@ -13449,7 +13449,7 @@ gtk_widget_class_install_action (GtkWidgetClass              *widget_class,
                                  GtkWidgetActionActivateFunc  activate)
 {
   gtk_widget_class_install_stateful_action (widget_class, action_name, activate,
-                                            NULL, NULL, NULL);
+                                            NULL, NULL, NULL, NULL);
 }
 
 /*
@@ -13458,9 +13458,10 @@ gtk_widget_class_install_action (GtkWidgetClass              *widget_class,
  * @action_name: a prefixed action name, such as "clipboard.paste"
  * @activate: callback to use when the action is activated
  * @parameter_type: (allow-none): the parameter type, or %NULL
- * @query: (allow-none): callback to use when the action properties
-       are queried, or %NULL for always-enabled stateless actions
- * @query_state: (allow-none): callback to use when the action state
+ * @state_type: (allow-none): the state type, or %NULL
+ * @set_state: (allow-none): callback to use when the action state
+       is set, or %NULL for stateless actions
+ * @get_state: (allow-none): callback to use when the action state
        is queried, or %NULL for stateless actions
  *
  * This should be called at class initialization time to specify
@@ -13474,6 +13475,7 @@ gtk_widget_class_install_stateful_action (GtkWidgetClass              *widget_cl
                                           const char                  *action_name,
                                           GtkWidgetActionActivateFunc  activate,
                                           const char                  *parameter_type,
+                                          const char                  *state_type,
                                           GtkWidgetActionSetStateFunc  set_state,
                                           GtkWidgetActionGetStateFunc  get_state)
 {
@@ -13504,6 +13506,7 @@ gtk_widget_class_install_stateful_action (GtkWidgetClass              *widget_cl
   action->name = g_strdup (action_name);
   action->activate = activate;
   action->parameter_type = parameter_type ? g_variant_type_new (parameter_type) : NULL;
+  action->state_type = state_type ? g_variant_type_new (state_type) : NULL;
   action->set_state = set_state;
   action->get_state = get_state;
 
index 73e92ac1cbf507dadaed22b52f6528f0d55d797b..d52dff446aaf65c3aa96caec098b67687c2624a2 100644 (file)
@@ -1080,6 +1080,7 @@ void                    gtk_widget_class_install_stateful_action (GtkWidgetClass
                                                                   const char                  *action_name,
                                                                   GtkWidgetActionActivateFunc  activate,
                                                                   const char                  *parameter_type,
+                                                                  const char                  *state_type,
                                                                   GtkWidgetActionSetStateFunc  set_state,
                                                                   GtkWidgetActionGetStateFunc  get_state);